﻿
/////////////////////////////////////////////////////////////////
//File: BlogHandler.cs
//Description: 这是安全控制器，使用代理模式。只有需要授权的数据才从这里读取，非授权数据请直接调用服务类。
//             CRUD授权过程：1. C,U操作要检查输入的数据是否符合授权。
//                          2. R操作要先读出目标数据，然后检查数据是否符合授权。
//                          3. D操作要先进行R操作过滤，判断输入数据是否符合授权，然后只执行符合授权的删除，忽略不符合授权的操作。
//                             为了保存程序的简洁和数据库执行效率，R过滤可以在Sql中完成。
//             
//Copyright© 2011 Moliu
//History:
//  2011-3-21 23:35:08    CodeSmith5.0.1    Original Version
//  2011-3-26 16:24:20    MoLiu             1
/////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Security.Permissions;
using System.Security;
using System.Threading;
using MAF.Common;
using My.Blog.Domain.Entities;
using My.Blog.Domain.Interfaces;
using My.Blog.Business.Persistence;

namespace My.Blog.Business.Security
{
    public partial class BlogSafe : IBlog
    {
        // 构造函数
        public BlogSafe(IBlog thisObj)
        {
            _This = thisObj;
        }
        
        #region IBlog成员
        
        // Create
        // 允许角色：
        //     管理员
        //     其他非登录状态的用户
        public  object CreateBlog(BlogInfo info )
        {
            // 权限判断
            if ( !SecurityUtility.IsLogon || SecurityUtility.IsBlogAdmin)
            { ;   }
            else
            { throw new SecurityException("您已经登录了博客，要创建新博客请先退出当前博客。"); }
            
            return _This.CreateBlog(info);
        }
        
        // Update
        // 允许角色：
        //     管理员
        public int UpdateBlog(BlogInfo info )
        {
            // 权限判断
            if (SecurityUtility.IsBlogAdmin)
            { ;   }
            else
            { throw new SecurityException("权限不足"); }
            
            return _This.UpdateBlog(info);
        }
        
        // Delete
        // 允许角色：
        //     管理员
        public int DeleteBlogs(BlogInfo info )
        {
            // 权限判断
            if (SecurityUtility.IsBlogAdmin)
            { ;   }
            else
            { throw new SecurityException("权限不足");  }
            
            return _This.DeleteBlogs(info);
        }
        
        // Detail
        // 允许角色：
        //     管理员--全部
        //     博主--自己的全部
        //     其他人--公开的
        public BlogInfo ReadBlogByConditions(BlogInfo info)
        {
            info = _This.ReadBlogByConditions(info);
            if (null == info)
                throw new ArgumentException("您想要查看的博客没有找到！");

            // 权限判断
            if (SecurityUtility.IsBlogMaster(info.Id.ToString()) || SecurityUtility.IsBlogAdmin)
            { ;   }
            else if (!info.IsPublished)
            { throw new SecurityException("权限不足"); }
            else
            {
            }

            return info;
        }
     

        // List
        // 允许角色：
        //     管理员--全部
        //     其他人--公开的
        public IList<BlogInfo> ReadBlogsByConditions(BlogInfo info, int pageSize, int currentPage )
        {
            if (null == info) { info = new BlogInfo(); }
            // 权限判断
            if (SecurityUtility.IsBlogAdmin)
            {  ;   }
            else
            { info.IsPublished = true; }
            
            return _This.ReadBlogsByConditions(info,pageSize,currentPage);
        }
        
        // Count
        public int ReadBlogsCountByConditions( BlogInfo info )
        {
            return _This.ReadBlogsCountByConditions( info );
        }
        
        #endregion 
        
        #region Private Member
        private IBlog _This = null;
        #endregion
        
        //================================
        // 上面是自动生成的代码,下面是手工编写的代码
        //================================        
    }
}
    